/**
 * 身份证号码脱敏处理函数
 * @param {string} idCard - 原始身份证号码
 * @param {number} frontLen - 保留前几位，默认为4
 * @param {number} endLen - 保留后几位，默认为4
 * @param {string} maskChar - 脱敏替换字符，默认为*
 * @returns {string} 脱敏后的身份证号码
 */
function maskIdCard(idCard, frontLen = 4, endLen = 4, maskChar = '*') {
  // 参数验证
  if (!idCard) {
    return '';
  }
  
  // 将非字符串类型转为字符串
  const idCardStr = String(idCard);
  
  // 如果身份证号码长度小于或等于 (frontLen + endLen)，则不进行脱敏处理
  if (idCardStr.length <= frontLen + endLen) {
    return idCardStr;
  }
  
  // 获取需要保留的前几位和后几位
  const frontPart = idCardStr.substring(0, frontLen);
  const endPart = idCardStr.substring(idCardStr.length - endLen);
  
  // 计算中间需要被替换的字符数量
  const maskLength = idCardStr.length - frontLen - endLen;
  
  // 生成脱敏字符串
  const maskPart = maskChar.repeat(maskLength);
  
  // 拼接并返回最终结果
  return `${frontPart}${maskPart}${endPart}`;
}

/**
 * 中国大陆18位身份证号码脱敏（显示前4位和后4位）
 * @param {string} idCard - 身份证号码
 * @returns {string} 脱敏后的身份证号码
 */
function maskChineseIdCard(idCard) {
  return maskIdCard(idCard, 4, 4, '*');
}

/**
 * 中国香港身份证脱敏处理（显示首字母、前1位数字和最后1位）
 * @param {string} hkIdCard - 香港身份证号码，例如：A123456(7)
 * @returns {string} 脱敏后的香港身份证号码
 */
function maskHKIdCard(hkIdCard) {
  if (!hkIdCard || hkIdCard.length < 4) {
    return hkIdCard;
  }
  
  const firstChar = hkIdCard[0];
  const secondChar = hkIdCard[1];
  const lastPart = hkIdCard.substring(hkIdCard.length - 3);
  
  return `${firstChar}${secondChar}${'*'.repeat(hkIdCard.length - 5)}${lastPart}`;
}

export {
  maskIdCard,
  maskChineseIdCard,
  maskHKIdCard
}; 